package com.cw.DesignModel23.Ceational.BuilderPattern.builder5;

/**
 * 由于TextBuilder和HTMLBuilder都是Builder的子类，因此Director 仅仅使用Builder的方法即可编写文档。
 * Director并不关心实际编写文档的到底是TextBuilder还是HTMBuilder
 */
public class Director {
    private Builder builder;

    /**
     * 实际上不会将 Builder类的实例作为参数传递给 Director类。这是因为 Builder 类是抽象类，是无法生成其实例的。
     * 实际上传递给 Director 类的是 Builder类的子类
     * @param builder
     */
    public Director(Builder builder) {
        this.builder = builder;
    }

    /**
     * 编写文档
     */
    public void construct() {
        // 标题
        builder.makeTitle("Greeting");
        // 字符串
        builder.makeString("从早上至下午");
        // 条目
        builder.makeItems(new String[]{
                "早上好。",
                "下午好。",
        });
        // 其他字符串
        builder.makeString("晚上");
        // 其他条目
        builder.makeItems(new String[]{
                "晚上好。",
                "晚安。",
                "再见。",
        });
        // 完成文档
        builder.close();
    }
}

